iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 13
1
自我挑戰組

類神經網路搭配啟發式演算法於時間序列之應用系列 第 13

DAY 12 - 以粒子群演算法初始化網路權重

  • 分享至 

  • xImage
  •  

關於昨日 DAY 11 已經分享了許多粒子群演算法的觀念,今天要來分享的是說,粒子群演算法如何來做初始化權重的部分。同時也會來分享粒子群演算法的基本公式,我覺得了解基本公式之後,未來你在看到其他的改良或變形,你就會能輕易上手,今天的內容很少,所以最後我會談一下啟發式演算法和平行運算的關係,因為實務上我們如果想去搜尋最佳解,我們會一次將不同粒子執行在不同的核心上面,如果你是自己一個人也沒關係,了解這個觀念不會太困難。

粒子群演算法公式

昨日 DAY 11 我們談到每個粒子就是一組參數,這個參數會在一個參數空間中,而這規定了粒子移動的範圍,因此初始化的過程我們必須先初始化給粒子一組參數,根據你要解決的問題會有所不同,如果是 RBFNN 的話,那就是我們的中心點,初始化其實不會太難,因為就只是隨機出一組中心點,除了中心點之外,我們也要隨機出一組粒子速度,透過每回合重新計算粒子的速度方向,位置再跟著速度移動,就達到了一個搜索的功能。

簡單來說,粒子的速度計算公式為:

particle.velocity =  inertia * particle.velocity + ...
            cognitionAccelerationConst * rand() * ( pbest.position - particle.position ) + ...
            socialAccelerationConst    * rand() * ( gbest.position - particle.position )

其中我們可以看到這裡有三個部分,第一部分是 inertia(慣性)乘上 particle.velocity (原本速度)這代表的是說,因為粒子每次移動到新的方向都是一個成本,不應該輕言放棄原本的方向,因此會給予他的速度一個慣性,這個慣性依據你的參數空間有所不同,原則上在美個維度都在 [0, 1] 的參數空間,慣性也是在 [0, 1] 區間。

第二部分是認知速度常數 cognitionAccelerationConst 乘上亂數 rand() 再乘上個人最佳解與目前位置的方向向量 ( pbest.position - particle.position ) 這是什麼意思呢?因為每個粒子在移動過程中,他也保有自己最佳化的一點點獨立性,因此他除了會往粒子群中的最佳解移動,也會受到自己過往優化歷程中最佳解位置的拉扯牽制,隨著你的訓練的迭代次數越逼近最大迭代次數,我們通常會讓這個常數逐漸的減小,讓他漸漸放棄自己的最佳解,往整個粒子群的最佳解移動。

第三部分是社群速度常數 socialAccelerationConst 乘上亂數 rand() 再乘上粒子群所有中最佳解與目前該粒子位置的方向向量 ( gbest.position - particle.position ),這表現的就是每個粒子會逐漸靠近所有粒子群中的最佳解,然而在剛開始搜尋的時候,由於大家都才剛開始,粒子群中的最佳粒子會不斷被其他粒子取代,因此在過早的期間不應該太快速的往粒子群最佳解靠近,但是只要隨的迭代次數接近最大跌代次數,通常社群速度常數就會逐漸拉高,讓大家開始花更多時間去協助搜尋最佳粒子周圍參數是否有更好的解。

當我們每一次算出一組速度,我們就可以跟新我們的粒子的位置:

particle.position = particle.position + particle.velocity;

那如果我在初始化過程中,我們通常是先隨機出許多粒子和粒子的速度,然後在進行優化,大概是這樣子。

平行運算與啟發式搜尋

平行運算和啟發式搜尋之所以能有連結,是因為例如像粒子群演算法,我們初始化的粒子假設有 20 顆,我們其實可以平行在 20 個核心去做運算,這個前提是你的模型如果比較複雜,例如比較多層或是比較多大矩陣的計算,然後每次優化再把 20 個核心的結果聚在一起做優化和修正,然後再送到不同平行運算系統。


上一篇
DAY 11 - 粒子群演算法簡介
下一篇
DAY 13 - 以粒子群演算法修正網路權重
系列文
類神經網路搭配啟發式演算法於時間序列之應用27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言